2 #ifndef FRAMELIB_PARAMETERS_H 3 #define FRAMELIB_PARAMETERS_H 17 static const char *typeStringsDouble[] = {
"double",
"enum",
"string",
"fixed length double array",
"variable length double array" };
18 static const char *typeStringsInteger[] = {
"int",
"enum",
"string",
"fixed length int array",
"variable length int array" };
19 static const char *typeStringsBool[] = {
"bool",
"enum",
"string",
"fixed length bool array",
"variable length bool array" };
46 enum DataType { kDoubleArray, kString };
58 static size_t calcSize(
const char *tag,
const char *str) {
return sizeType() + sizeString(tag) + sizeString(str); }
59 static size_t calcSize(
const char *tag,
size_t N) {
return sizeType() + sizeString(tag) + sizeArray(N); }
64 void write(
const char *tag,
const char *str);
65 void write(
const char *tag,
const double *values,
size_t N);
76 static size_t alignSize(
size_t size) {
return (size + (alignment - 1)) & ~(alignment - 1); }
96 void alignmentChecks()
const;
100 static size_t sizeType() {
return alignSize(
sizeof(DataType)); }
101 static size_t sizeString(
const char *str) {
return alignSize(
sizeof(
size_t)) +
alignSize(strlen(str) + 1); }
102 static size_t sizeArray(
size_t N) {
return alignSize(
sizeof(
size_t)) +
alignSize((N *
sizeof(
double))); }
106 void writeType(DataType type);
107 void writeSize(
size_t size);
108 void writeString(
const char *str);
109 void writeDoubles(
const double *ptr,
size_t N);
114 void readSize(
BytePointer *readPtr,
size_t *size)
const;
115 void readDoubles(
BytePointer *readPtr,
double **values,
size_t *N)
const;
116 void readString(
BytePointer *readPtr,
char **str)
const;
158 void add(
const char *str) { mInfoStrings.push_back(str); }
159 void add(
const std::string &str) { mInfoStrings.push_back(str); }
160 const char *
get(
unsigned long idx) {
return (idx < mInfoStrings.size()) ? mInfoStrings[idx].c_str() :
"No parameter info available"; }
164 std::vector<std::string> mInfoStrings;
178 enum Flags { kFlagInstantiation = 0x1, kFlagBool = 0x2, kFlagInteger = 0x4, kFlagNonNumeric = 0x8 };
182 Parameter(
const char *name,
long argumentIdx);
183 virtual ~Parameter() {};
190 void setBoolOnly() { mFlags |= kFlagBool | kFlagInteger; }
191 void setIntegerOnly() { mFlags |= kFlagInteger; }
192 void setNonNumeric() { mFlags |= kFlagNonNumeric; }
196 void setClip(
double min,
double max);
198 virtual void set(
const char *str) {}
199 virtual void set(
double value) {}
200 virtual void set(
double *values,
size_t N);
202 virtual void clear() = 0;
208 virtual Type type() = 0;
210 const char *name()
const {
return mName.c_str(); }
211 long argumentIdx()
const {
return mArgumentIdx; }
212 int flags()
const {
return mFlags; }
215 double getMin()
const {
return mMin; }
216 double getMax() {
return mMax; }
217 void getRange(
double *min,
double *max)
const;
223 double getDefault()
const {
return mDefault; }
225 virtual double getValue()
const {
return 0; }
226 virtual const char *
getString()
const {
return NULL; }
229 virtual const double *
getArray()
const {
return NULL; }
253 class Enum :
public Parameter
258 Enum(
const char *name,
long argumentIdx);
264 virtual void set(
double value);
265 virtual void set(
double *values,
size_t N);
266 virtual void set(
const char *str);
268 virtual void clear() { Enum::set(0.0); };
274 virtual double getValue()
const {
return mValue; }
275 virtual const char *
getString()
const {
return mItems[mValue].c_str(); }
276 virtual const char *
getItemString(
unsigned long item)
const {
return mItems[item].c_str(); }
280 std::vector <std::string> mItems;
281 unsigned long mValue;
288 class Value :
public Parameter
293 Value(
const char *name,
long argumentIdx,
double defaultValue) : Parameter(name, argumentIdx), mValue(defaultValue)
294 { mDefault = defaultValue; }
298 virtual void set(
double value);
299 virtual void set(
double *values,
size_t N);
301 virtual void clear() { Value::set(mDefault); };
307 virtual double getValue()
const {
return mValue; }
318 class String :
public Parameter
320 const static size_t maxLen = 128;
324 String(
const char *name,
long argumentIdx);
328 virtual void set(
const char *str);
330 virtual void clear() { String::set(NULL); };
334 virtual Type type() {
return kString; }
336 virtual const char *
getString()
const {
return mCString; }
340 char mCString[maxLen + 1];
347 class Array :
public Parameter,
private std::vector<double>
352 Array(
const char *name,
long argumentIdx,
double defaultValue,
size_t size);
353 Array(
const char *name,
long argumentIdx,
double defaultValue,
size_t maxSize,
size_t size);
357 virtual void set(
double *values,
size_t N);
359 virtual void clear() { Array::set(NULL, 0); };
367 virtual const double *
getArray()
const {
return &mItems[0]; }
371 std::vector<double> mItems;
374 const bool mVariableSize;
389 for (std::vector <Parameter *>::iterator it = mParameters.begin(); it != mParameters.end(); it++)
395 unsigned long size()
const {
return mParameters.size(); }
399 for (
unsigned long i = 0; i < mParameters.size(); i++)
400 if (strcmp(name, mParameters[i]->name()) == 0)
403 long argumentIdx = convertToNumber(name);
405 if (argumentIdx >= 0)
406 for (
unsigned long i = 0; i < mParameters.size(); i++)
407 if (argumentIdx == mParameters[i]->argumentIdx())
415 void addBool(
unsigned long index,
const char *name,
bool defaultValue =
false,
long argumentIdx = -1)
417 addParameter(index,
new Value(name, argumentIdx, defaultValue));
418 mParameters.back()->setClip(
false,
true);
419 mParameters.back()->setBoolOnly();
422 void addDouble(
unsigned long index,
const char *name,
double defaultValue = 0.0,
long argumentIdx = -1)
424 addParameter(index,
new Value(name, argumentIdx, defaultValue));
427 void addInt(
unsigned long index,
const char *name,
long defaultValue = 0,
long argumentIdx = -1)
429 addParameter(index,
new Value(name, argumentIdx, defaultValue));
430 mParameters.back()->setIntegerOnly();
433 void addString(
unsigned long index,
const char *name,
long argumentIdx = -1)
435 addParameter(index,
new String(name, argumentIdx));
438 void addEnum(
unsigned long index,
const char *name,
long argumentIdx = -1)
440 addParameter(index,
new Enum(name, argumentIdx));
445 mParameters.back()->addEnumItem(str);
448 void addBoolArray(
unsigned long index,
const char *name,
long defaultValue,
size_t size,
long argumentIdx = -1)
450 addParameter(index,
new Array(name, argumentIdx, defaultValue, size));
451 mParameters.back()->setBoolOnly();
454 void addIntArray(
unsigned long index,
const char *name,
long defaultValue,
size_t size,
long argumentIdx = -1)
456 addParameter(index,
new Array(name, argumentIdx, defaultValue, size));
457 mParameters.back()->setIntegerOnly();
460 void addDoubleArray(
unsigned long index,
const char *name,
double defaultValue,
size_t size,
long argumentIdx = -1)
462 addParameter(index,
new Array(name, argumentIdx, defaultValue, size));
465 void addVariableBoolArray(
unsigned long index,
const char *name,
long defaultValue,
size_t maxSize,
size_t size,
long argumentIdx = -1)
467 addParameter(index,
new Array(name, argumentIdx, defaultValue, maxSize, size));
468 mParameters.back()->setBoolOnly();
471 void addVariableIntArray(
unsigned long index,
const char *name,
long defaultValue,
size_t maxSize,
size_t size,
long argumentIdx = -1)
473 addParameter(index,
new Array(name, argumentIdx, defaultValue, maxSize, size));
474 mParameters.back()->setIntegerOnly();
479 addParameter(index,
new Array(name, argumentIdx, defaultValue, maxSize, size));
490 void setMin(
double min) { mParameters.back()->setMin(min); }
491 void setMax(
double max) { mParameters.back()->setMax(max); }
492 void setClip(
double min,
double max) { mParameters.back()->setClip(min, max); }
496 void set(
Serial *serialised) {
if (serialised) serialised->read(
this); }
498 void set(
unsigned long idx,
bool value) {
set(idx, (double) value); }
499 void set(
const char *name,
bool value) {
set(name, (double) value); }
501 void set(
unsigned long idx,
long value) {
set(idx, (double) value); }
502 void set(
const char *name,
long value) {
set(name, (double) value); }
504 void set(
unsigned long idx,
double value) {
if (idx <
size()) mParameters[idx]->
set(value); }
505 void set(
const char *name,
double value) {
set(
getIdx(name), value); }
507 void set(
unsigned long idx,
char *str) {
if (idx <
size()) mParameters[idx]->
set(str); }
508 void set(
const char *name,
char *str) {
set(
getIdx(name), str); }
510 void set(
unsigned long idx,
double *values,
size_t N) {
if (idx <
size()) mParameters[idx]->
set(values, N); }
511 void set(
const char *name,
double *values,
size_t N) {
set(
getIdx(name), values, N); }
513 void clear(
unsigned long idx) {
if (idx <
size()) mParameters[idx]->clear(); }
520 std::string
getName(
unsigned long idx)
const {
return mParameters[idx]->name(); }
522 long getArgumentIdx(
unsigned long idx)
const {
return mParameters[idx]->argumentIdx(); }
527 Type getType(
unsigned long idx)
const {
return mParameters[idx]->type(); }
543 double getMin(
unsigned long idx)
const {
return mParameters[idx]->getMin(); }
546 double getMax(
unsigned long idx)
const {
return mParameters[idx]->getMax(); }
549 void getRange(
unsigned long idx,
double *min,
double *max)
const {
return mParameters[idx]->getRange(min, max); }
554 std::string
getItemString(
unsigned long idx,
unsigned long item)
const {
return mParameters[idx]->getItemString(item); }
559 std::string
getInfo(
unsigned long idx)
const {
return mParameterInfo ? mParameterInfo->get(idx) :
"No parameter info available"; }
564 double getDefault(
unsigned long idx)
const {
return mParameters[idx]->getDefault(); }
572 double getValue(
unsigned long idx)
const {
return mParameters[idx]->getValue(); }
581 const char *
getString(
unsigned long idx)
const {
return mParameters[idx]->getString(); }
584 const double *
getArray(
unsigned long idx)
const {
return mParameters[idx]->getArray(); }
586 const double *
getArray(
unsigned long idx,
size_t *
size)
const {
return mParameters[idx]->getArray(size); }
589 size_t getArraySize(
unsigned long idx)
const {
return mParameters[idx]->getArraySize(); }
592 size_t getArrayMaxSize(
unsigned long idx)
const {
return mParameters[idx]->getArrayMaxSize(); }
595 bool changed(
unsigned long idx) {
return mParameters[idx]->changed(); }
607 void addParameter(
unsigned long index, Parameter *attr)
609 assert((index == mParameters.size()) &&
"parameters must be added in order");
610 mParameters.push_back(attr);
613 static long convertToNumber(
const char *name)
617 for (
unsigned long i = 0; ; i++)
619 long current = name[i];
621 if (current == 0 && i)
624 if (current < '0' || current >
'9')
627 result = (result * 10) + (current -
'0');
633 std::vector <Parameter *> mParameters;
634 Info *mParameterInfo;
AutoSerial(size_t size)
Definition: FrameLib_Parameters.h:135
size_t getArraySize(unsigned long idx) const
Definition: FrameLib_Parameters.h:589
void addEnumItem(unsigned long index, const char *str)
Definition: FrameLib_Parameters.h:443
~AutoSerial()
Definition: FrameLib_Parameters.h:136
void add(const char *str)
Definition: FrameLib_Parameters.h:158
long getBool(unsigned long idx) const
Definition: FrameLib_Parameters.h:578
Definition: FrameLib_Parameters.h:27
void addDouble(unsigned long index, const char *name, double defaultValue=0.0, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:422
double getValue(const char *name) const
Definition: FrameLib_Parameters.h:573
Definition: FrameLib_Parameters.h:21
NumericType getNumericType(const char *name) const
Definition: FrameLib_Parameters.h:531
void add(const std::string &str)
Definition: FrameLib_Parameters.h:159
static size_t inPlaceSize(size_t size)
Definition: FrameLib_Parameters.h:77
static Serial * newInPlace(void *ptr, size_t size)
Definition: FrameLib_Parameters.h:79
Serial()
Definition: FrameLib_Parameters.cpp:11
void setClip(double min, double max)
Definition: FrameLib_Parameters.h:492
void getRange(const char *name, double *min, double *max) const
Definition: FrameLib_Parameters.h:550
std::string getName(unsigned long idx) const
Definition: FrameLib_Parameters.h:520
void getRange(unsigned long idx, double *min, double *max) const
Definition: FrameLib_Parameters.h:549
const double * getArray(unsigned long idx, size_t *size) const
Definition: FrameLib_Parameters.h:586
Definition: FrameLib_Parameters.h:34
double getMin(unsigned long idx) const
Definition: FrameLib_Parameters.h:543
std::string getItemString(const char *name, unsigned long item) const
Definition: FrameLib_Parameters.h:555
void addVariableIntArray(unsigned long index, const char *name, long defaultValue, size_t maxSize, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:471
FrameLib_Parameters(Info *info)
Definition: FrameLib_Parameters.h:383
ClipMode getClipMode(unsigned long idx) const
Definition: FrameLib_Parameters.h:540
Definition: FrameLib_Parameters.h:27
void write(const char *tag, double *values, size_t N)
Definition: FrameLib_Parameters.h:142
void setMax(double max)
Definition: FrameLib_Parameters.h:491
double getDefault(const char *name) const
Definition: FrameLib_Parameters.h:565
double getMin(const char *name) const
Definition: FrameLib_Parameters.h:544
static size_t calcSize(Serial *serialised)
Definition: FrameLib_Parameters.h:57
void addBool(unsigned long index, const char *name, bool defaultValue=false, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:415
void clear(unsigned long idx)
Definition: FrameLib_Parameters.h:513
size_t mSize
Definition: FrameLib_Parameters.h:123
Definition: FrameLib_Parameters.h:27
Type getType(unsigned long idx) const
Definition: FrameLib_Parameters.h:527
std::string getInfo(unsigned long idx) const
Definition: FrameLib_Parameters.h:559
void addVariableBoolArray(unsigned long index, const char *name, long defaultValue, size_t maxSize, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:465
Definition: FrameLib_Parameters.h:28
unsigned char * BytePointer
Definition: FrameLib_Types.h:16
size_t size() const
Definition: FrameLib_Parameters.h:73
std::string getInfo(const char *name) const
Definition: FrameLib_Parameters.h:560
void addVariableDoubleArray(unsigned long index, const char *name, double defaultValue, size_t maxSize, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:477
size_t mMaxSize
Definition: FrameLib_Parameters.h:124
size_t getArraySize(const char *name) const
Definition: FrameLib_Parameters.h:590
Definition: FrameLib_Parameters.h:28
NumericType
Definition: FrameLib_Parameters.h:26
static const size_t alignment
Definition: FrameLib_Parameters.h:41
void addIntArray(unsigned long index, const char *name, long defaultValue, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:454
~FrameLib_Parameters()
Definition: FrameLib_Parameters.h:387
bool changed(const char *name)
Definition: FrameLib_Parameters.h:596
long getArgumentIdx(unsigned long idx) const
Definition: FrameLib_Parameters.h:522
Definition: FrameLib_Parameters.h:27
Definition: FrameLib_Parameters.h:28
void write(const char *tag, char *str)
Definition: FrameLib_Parameters.h:141
Definition: FrameLib_Parameters.h:27
void write(Serial *serialised)
Definition: FrameLib_Parameters.cpp:18
const char * getString(unsigned long idx) const
Definition: FrameLib_Parameters.h:581
unsigned char Byte
Definition: FrameLib_Types.h:15
double getValue(unsigned long idx) const
Definition: FrameLib_Parameters.h:572
void setMin(double min)
Definition: FrameLib_Parameters.h:490
BytePointer mPtr
Definition: FrameLib_Parameters.h:122
long getInt(unsigned long idx) const
Definition: FrameLib_Parameters.h:575
Definition: FrameLib_Parameters.h:26
NumericType getNumericType(unsigned long idx) const
Definition: FrameLib_Parameters.cpp:436
void clear(const char *name)
Definition: FrameLib_Parameters.h:514
unsigned long size() const
Definition: FrameLib_Parameters.h:395
double getMax(const char *name) const
Definition: FrameLib_Parameters.h:547
Definition: FrameLib_Parameters.h:153
const double * getArray(unsigned long idx) const
Definition: FrameLib_Parameters.h:584
std::string getTypeString(unsigned long idx) const
Definition: FrameLib_Parameters.cpp:447
std::string getItemString(unsigned long idx, unsigned long item) const
Definition: FrameLib_Parameters.h:554
ClipMode
Definition: FrameLib_Parameters.h:28
AutoSerial()
Definition: FrameLib_Parameters.h:134
long getArgumentIdx(const char *name) const
Definition: FrameLib_Parameters.h:523
ClipMode getClipMode(const char *name) const
Definition: FrameLib_Parameters.h:541
size_t getArrayMaxSize(unsigned long idx) const
Definition: FrameLib_Parameters.h:592
void setInstantiation()
Definition: FrameLib_Parameters.h:486
long getIdx(const char *name) const
Definition: FrameLib_Parameters.h:397
Type
Definition: FrameLib_Parameters.h:27
Definition: FrameLib_Parameters.h:26
bool getBool(const char *name) const
Definition: FrameLib_Parameters.h:579
const double * getArray(const char *name, size_t *size) const
Definition: FrameLib_Parameters.h:587
long getInt(const char *name) const
Definition: FrameLib_Parameters.h:576
void read(FrameLib_Parameters *parameters) const
Definition: FrameLib_Parameters.cpp:49
static size_t alignSize(size_t size)
Definition: FrameLib_Parameters.h:76
bool checkSize(size_t writeSize)
Definition: FrameLib_Parameters.cpp:150
double getDefault(unsigned long idx) const
Definition: FrameLib_Parameters.h:564
Type getType(const char *name) const
Definition: FrameLib_Parameters.h:528
const double * getArray(const char *name) const
Definition: FrameLib_Parameters.h:585
static size_t calcSize(const char *tag, const char *str)
Definition: FrameLib_Parameters.h:58
Definition: FrameLib_Parameters.h:129
size_t getArrayMaxSize(const char *name) const
Definition: FrameLib_Parameters.h:593
void write(Serial *serialised)
Definition: FrameLib_Parameters.h:140
std::string getDefaultString(const char *name) const
Definition: FrameLib_Parameters.h:568
void addBoolArray(unsigned long index, const char *name, long defaultValue, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:448
Definition: FrameLib_Parameters.h:28
void addInt(unsigned long index, const char *name, long defaultValue=0, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:427
std::string getTypeString(const char *name) const
Definition: FrameLib_Parameters.h:536
Definition: FrameLib_Parameters.h:26
bool changed(unsigned long idx)
Definition: FrameLib_Parameters.h:595
void addEnum(unsigned long index, const char *name, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:438
static const size_t minGrowSize
Definition: FrameLib_Parameters.h:42
const char * getString(const char *name) const
Definition: FrameLib_Parameters.h:582
void addString(unsigned long index, const char *name, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:433
static size_t calcSize(const char *tag, size_t N)
Definition: FrameLib_Parameters.h:59
std::string getDefaultString(unsigned long idx) const
Definition: FrameLib_Parameters.cpp:466
void clear()
Definition: FrameLib_Parameters.h:74
void addDoubleArray(unsigned long index, const char *name, double defaultValue, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:460
Definition: FrameLib_Parameters.h:26
double getMax(unsigned long idx) const
Definition: FrameLib_Parameters.h:546